feat: integrate iOS credential autofill#21
Conversation
There was a problem hiding this comment.
Pull request overview
Integrates iOS passkey AutoFill/Credential Provider support into Rocca by adding iOS configuration (associated domains + entitlements) and synchronizing native-stored credentials into the app’s passkey store during bootstrap/resume, while also tightening bootstrap concurrency to avoid overlapping biometric prompts.
Changes:
- Add iOS AutoFill configuration (associated domains, entitlements) and make passkey AutoFill site/label configurable via env/app config.
- Sync native-stored passkey credentials into
passkeysStoreduring bootstrap and delete native credentials when passkeys are removed. - Prevent overlapping bootstraps by reusing an in-flight bootstrap promise; simplify Passkeys UI display and update tests accordingly.
Reviewed changes
Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| stores/logs.ts | Switches logs store to use @tanstack/store Store. |
| README.md | Adds a note about dependency/publishing requirements for the iOS AutoFill integration. |
| package.json | Bumps/pins @algorandfoundation/react-native-passkey-autofill to 1.0.0-canary.16. |
| package-lock.json | Locks updated dependency versions for passkey autofill + transitive deps. |
| lib/credentialProvider.ts | Adjusts “credential provider service enabled” logic (Android-specific). |
| lib/bootstrap.ts | Adds native credential sync, derived key setup for native side, and bootstrap de-duping. |
| hooks/useConnection.ts | Updates fetchSecret calls to the new options-based signature. |
| extensions/passkeys-keystore/extension.ts | Deletes native credentials when passkeys are removed. |
| dialogs/DidDocumentModal.tsx | Narrows JSONTree input via explicit casting. |
| app/passkeys.tsx | Simplifies passkey list fields (website + username). |
| app/import.tsx | Updates bootstrap invocation to match new signature. |
| app/_layout.tsx | Triggers bootstrap on app resume (after backgrounding) and on passkey events. |
| app.config.js | Adds iOS associated domains/entitlements and makes AutoFill site/label configurable. |
| tests/CollectionScreens-test.tsx | Updates Passkeys screen test expectations for new UI fields. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -1,4 +1,4 @@ | |||
| import { Store } from '@tanstack/react-store'; | |||
| import { Store } from '@tanstack/store'; | |||
There was a problem hiding this comment.
correct (I see this change unneeded and should use @tanstack/react-store)
|
LGTM functionally, if behavior works as intended on iOS let's get it merged after addressing the minor nit above. |
Summary
Dependency
Draft until algorandfoundation/react-native-passkey-autofill#11 is merged, published to npm, and Rocca is updated to depend on that published package version.
Validation